﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using Onshi.POS.Contabilidad;
using Onshi.POS.Contabilidad.Vistas;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class CuentasContablesAbm : FormularioBase, ICuentaContableAbm
    {
        #region Atributos
        private CuentasContablesAbmPresentador presentador;
        private Int32 idCuentaContable;
        private EnumEstadoAltaBajaModificacionHabilitacion estadoAbm;
        private CuentaContable cuentaContableSeleccionado;
        #endregion

        #region Constructor
        public CuentasContablesAbm(Boolean esSeleccion)
        {
            InitializeComponent();
            btnSeleccionar.Visible = esSeleccion;
            presentador = new CuentasContablesAbmPresentador(this);

        }
        #endregion

        #region Propiedades
        [Browsable(false)]
        public int IdTipoCuentaContable
        {
            get { return (Int32)cboTiposCuentasContables.cboTiposCuentasContables.SelectedValue; }
        }

        [Browsable(false)]
        public string NombreFiltro
        {
            get { return txtNombreFiltro.Text.Trim(); }
        }

        [Browsable(false)]
        public int IdTipoCuentaContableFiltro
        {
            get {
                if (cboTiposCuentasContablesFiltro.cboTiposCuentasContables.SelectedValue != null)
                    return (Int32)cboTiposCuentasContablesFiltro.cboTiposCuentasContables.SelectedValue;
                else
                    return 0;
            }
        }

        [Browsable(false)]
        public bool ActivoFiltro
        {
            get { return chkActivoFiltro.Checked; }
        }

        [Browsable(false)]
        public EnumEstadoAltaBajaModificacionHabilitacion EstadoAbm
        {
            get { return estadoAbm; }
        }
        
        [Browsable(false)]
        public int IdCuentaContable
        {
            get { return idCuentaContable;}
        }

        [Browsable(false)]
        public string Nombre
        {
            get { return txtNombre.Text.Trim(); }
        }

        [Browsable(false)]
        public bool Activo
        {
            get { return chkActivo.Checked; }
        }

        [Browsable(false)]
        public List<CuentaContable> Lista
        {
            set { bsCuentasContables.DataSource = value; }
        }
        #endregion

        #region Eventos
        private void CuentasContablesAbm_Load(object sender, EventArgs e)
        {
            cboTiposCuentasContables.ActualizarListado();
            cboTiposCuentasContablesFiltro.ActualizarListado();
            presentador.ActualizarGrilla();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            HabilitarControles();
            txtNombre.Focus();
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.ALTA;
        }

        private void btnModficiar_Click(object sender, EventArgs e)
        {
            if (bsCuentasContables.Current != null)
            {
                HabilitarControles();
                txtNombre.Focus();
                estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION;
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.bsCuentasContables.Current != null)
                {
                    if (MessageBox.Show("¿Esta seguro que desea eliminar la cuenta contable seleccionada?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.BAJA;
                        presentador.Eliminar();
                        solLocalidades.SelectedTab = tabLista;
                        ultimaActualizacion1.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Boolean ok = true;
                errCuentas.Clear();
                if (txtNombre.Text.Trim() == String.Empty)
                {
                    ok = false;
                    errCuentas.SetError(txtNombre, Properties.Settings.Default.CompletarCampo);
                }
                if (cboTiposCuentasContables.cboTiposCuentasContables.SelectedIndex == -1)
                {
                    ok = false;
                    errCuentas.SetError(cboTiposCuentasContables, Properties.Settings.Default.CompletarCampo);
                }
                if (ok == true)
                {
                    presentador.Aceptar();
                    HabilitarControles();
                    solLocalidades.SelectedTab = tabLista;
                    ultimaActualizacion1.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            HabilitarControles();
            ActualizarCampos();
            errCuentas.Clear();
        }

        private void txtNombreFiltro_TextChanged(object sender, EventArgs e)
        {
            presentador.Filtrar();
        }
        #endregion

        #region Metodos
        private void ActualizarCampos()
        {
            if (bsCuentasContables.Current != null)
            {
                txtNombre.Text = ((CuentaContable)bsCuentasContables.Current).Nombre;
                if (((CuentaContable)bsCuentasContables.Current).TipoCuentaContable != null)
                    cboTiposCuentasContables.cboTiposCuentasContables.SelectedValue = ((CuentaContable)bsCuentasContables.Current).TipoCuentaContable.Id;
                idCuentaContable = ((CuentaContable)bsCuentasContables.Current).Id;
            }
            else
                LimpiarCampos();
        }

        private void HabilitarControles()
        {
            txtNombre.Enabled = !txtNombre.Enabled;
            chkActivo.Enabled = !chkActivo.Enabled;
            cboTiposCuentasContables.Enabled = !cboTiposCuentasContables.Enabled;

            btnNuevo.Enabled = !btnNuevo.Enabled;
            btnModficiar.Enabled = !btnModficiar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
            navCuentasContables.Enabled = !navCuentasContables.Enabled;
        }

        private void LimpiarCampos()
        {
            idCuentaContable = 0;
            txtNombre.Text = String.Empty;
            cboTiposCuentasContables.cboTiposCuentasContables.SelectedIndex = -1;
            chkActivo.Enabled = false;
        }

        private void LimpiarFiltro()
        {
            txtNombreFiltro.Text = String.Empty;
            chkActivoFiltro.CheckState = CheckState.Indeterminate;
            cboTiposCuentasContablesFiltro.cboTiposCuentasContables.SelectedIndex = 0;
        }
        #endregion

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            presentador.ActualizarGrilla();
            ultimaActualizacion1.Actualizar();
        }

        private void grdLocalidades_SelectionChanged(object sender, EventArgs e)
        {
            ActualizarCampos();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarFiltro();
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (bsCuentasContables.Current != null)
            {
                cuentaContableSeleccionado = (CuentaContable)bsCuentasContables.Current;
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
                MessageBox.Show("No hay ninguna cuenta seleccionada", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void bsCuentasContables_CurrentChanged(object sender, EventArgs e)
        {

        }
    }
}
